from django.core.exceptions import ValidationError
from django.db import models

# Create your models here.
from django.core.validators import MinValueValidator

# 枚举约束（用choices定义）
VALID_STATUSES = [("上架", "上架"), ("下架", "下架")]
VALID_EXPERIENCES = [("应届生", "应届生"), ("1-3年", "1-3年"), ("3-5年", "3-5年"), ("5-10年", "5-10年"),
                     ("10年以上", "10年以上")]
VALID_EDUCATIONS = [("大专", "大专"), ("本科", "本科"), ("硕士", "硕士"), ("博士", "博士")]


class Position(models.Model):
    """职位数据模型"""
    name = models.CharField(max_length=200, verbose_name="职位名称")
    company = models.CharField(max_length=200, verbose_name="企业名称")
    salary_min = models.IntegerField(validators=[MinValueValidator(0)], verbose_name="职位最低薪资(元)")
    salary_max = models.IntegerField(validators=[MinValueValidator(0)], verbose_name="职位最高薪资(元)")
    experience = models.CharField(max_length=20, choices=VALID_EXPERIENCES, verbose_name="工作经验要求")
    education = models.CharField(max_length=20, choices=VALID_EDUCATIONS, verbose_name="学历要求")
    required_skills = models.JSONField(verbose_name="职位技能要求")  # 存储技能数组，如["Python", "SQL"]
    description = models.TextField(verbose_name="职位描述")
    status = models.CharField(max_length=20, choices=VALID_STATUSES, default="上架", verbose_name="职位状态")
    publish_time = models.DateField(auto_now_add=True, verbose_name="发布时间")
    creator_id = models.CharField(max_length=50, verbose_name="发布企业ID")
    is_del = models.BooleanField(default=False, verbose_name="是否删除")

    class Meta:
        verbose_name = "职位"
        verbose_name_plural = "职位"

    def clean(self):
        """数据校验(Django表单/序列化器会调用)"""
        if self.salary_min > self.salary_max:
            raise ValidationError("职位最低薪资不能高于职位最高薪资")

    def __str__(self):
        return f"{self.name} ({self.company})"
    # //魔法方法__str__用于在Python终端中打印对象时返回字符串。
    # 假设该类是一个 “职位” 类（Job），有一个实例
    # job = Job(name="Python开发", company="某科技公司")，那么：
    # 执行print(job)
    # 会输出：Python开发(某科技公司)；
    # 执行str(job)
    # 会得到字符串："Python开发 (某科技公司)"。
